package Railroad;

import Railroad.Components.Switch;
import Railroad.Components.TrackItem;
import Railroad.Components.TrackNode;
import java.util.ArrayList;
import java.util.List;

// Zoznam všetkých prvkov stanice.
public class Zoznam {
    private ArrayList<TrackItem> aPole = new ArrayList<>();
    private final ArrayList<TrackNode> aObsaditelne = new ArrayList<>();
    private final ArrayList<Switch> aVyhybky = new ArrayList<>();

    // Konštruktor. Načítaný zoznam sa pridá do atribútu.
    public Zoznam (ArrayList<TrackItem> p) {
        aPole = p;
        najdiObsaditelne();
    }
    
    private void najdiObsaditelne() {
        for (TrackItem item : aPole) {
            if (item instanceof TrackNode)
                aObsaditelne.add((TrackNode)item);
        }
        for (TrackItem item : aObsaditelne) {
            if (item instanceof Switch) {
                Switch sw = (Switch)item;
                sw.setIdInDevice(aVyhybky.size());
                aVyhybky.add(sw);
            }
        }
    }
    
    // Konvertuje zadaný reťazec string na číslo a zavolá metódu hľadanie.
    public TrackItem vratHladany(String s) {
        int j = Integer.parseInt(s);
        return vratHladany(j);
    }

    // Vráti hľadaný prvok trate.
    public TrackItem vratHladany(int j) {
        TrackItem t = null;
        for (int i = 0; i < aPole.size(); i++) { 
            if(aPole.get(i).getId() == j) {
                t = aPole.get(i);
                break;
            }  
        }
        return t;
    }
    
    public TrackNode vratObsaditelny(int index) {
        return aObsaditelne.get(index);
    }
    
    public int dajPocetObsaditelnych() {
        return aObsaditelne.size();
    }
    
    public Switch vratVyhybku(int index) {
        return aVyhybky.get(index);
    }
    
    public int dajPocetVyhybiek() {
        return aVyhybky.size();
    }
    
    public List<Switch> dajZoznamVyhybiek() {
        return aVyhybky;
    }
    
    // Metóda vráti zoznam prvkov stanice.
    public List<TrackItem> dajPole() {
        return aPole;
    }
    
    public byte[] getNodeIdList() {
        byte[] array = new byte[aObsaditelne.size()];
        for (byte i = 0; i < aObsaditelne.size(); i++)
            array[i] = i;
        return array;
    }
    
    public byte[] getSwitchList() {
        byte[] array = new byte[aVyhybky.size()];
        for (byte i = 0; i < aVyhybky.size(); i++)
            array[i] = i;
        return array;
    }
}